const pool = require('../config/db');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');

// 用户登录
exports.login = async (req, res) => {
  const { username, password } = req.body;

  try {
    // 1. 查询用户
    const [users] = await pool.query(
      'SELECT * FROM users WHERE username = ?', 
      [username]
    );
    
    // 2. 用户不存在
    if (users.length === 0) {
      return res.status(401).json({ message: '无效的凭证' });
    }
    const user = users[0];

    // 3. 验证密码
    const isValid = await bcrypt.compare(password, user.password);
    if (!isValid) {
      return res.status(401).json({ message: '无效的凭证' });
    }

    // 4. 生成JWT
    const token = jwt.sign(
      { 
        userId: user.id, 
        role: user.role,
        username: user.username 
      },
      process.env.JWT_SECRET,
      { expiresIn: '1h' }  // 令牌有效期
    );

    // 5. 返回响应（排除密码字段）
    const { password: _, ...safeUser } = user;
    res.json({ 
      token,
      user: safeUser 
    });

  } catch (err) {
    res.status(500).json({ message: err.message });
  }
};

// 用户注册（示例）
exports.register = async (req, res) => {
  const { username, password, email } = req.body;
  
  try {
    // 密码加密
    const hashedPassword = await bcrypt.hash(password, 10);
    
    await pool.query(
      'INSERT INTO users (username, password, email) VALUES (?, ?, ?)',
      [username, hashedPassword, email]
    );
    
    res.status(201).json({ message: '用户注册成功' });
    
  } catch (err) {
    // 处理唯一约束错误（如用户名重复）
    if (err.code === 'ER_DUP_ENTRY') {
      return res.status(400).json({ message: '用户名或邮箱已存在' });
    }
    res.status(500).json({ message: err.message });
  }
};